iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0

你是否曾經遇到這樣的情況:當你正在將資料寫入資料庫時,由於某個欄位的值不正確,導致整筆資料無法成功寫入。如果你有過這樣的經歷,那麼恭喜你,你已經接觸過事務的概念了。

用這樣的舉例,或許會讓有意點點資料庫操作經驗的人更能體會 ”事務”

事務 (Transaction) 在資料庫中是指一個邏輯工作單元,它主要目的在做什麼呢?

簡單來說,事務的主要目的是確保資料庫操作 (CRUD) 的完整性和一致性,確保所有操作要麼全部成功要麼全部 RollBack,避免資料處於不一致的狀態。

它包含了一系列的操作,它包含了以下4個特性(俗稱 ACID):

  • 原子性(Atomicity) ,這個概念源自於原子的物理概念,它在希臘語中代表著不可分割的概念(有空可以去看看原子論),後人把這樣的想法延伸到了電腦科學上。事務中包含的操作被視為一個邏輯工作單元,在這個邏輯工作單元的操作,要麼全部成功,要麼全部失敗,不會有成功失敗各半等的狀況。
  • 一致性(Consistency) ,它確保了資料庫中的資料自始自終都符合資料庫定義的規則和約束條件。當事務執行前、執行中或是執行後,無論事務最後是成功或是失敗,都不會違反資料庫的約束和規則。
    舉例來說,今天有個欄位屬性值被設定為整數,如果有個事務執行過程中的操作欲將一字串插入該欄位中,因為不符合約束,事務會被回滾。
  • 隔離性(Isolation) ,它確保了多個事務同時對一個資料執行操作時不會互相干擾,這樣可以避免事務在執行的過程中讀到不一致的資料(之後會再利用一篇文章介紹事務隔離的層級)。
  • 持久性(Durability) ,它確保了資料的永久性,一旦事務成功結束,它對資料庫中資料的更動就會被永久的保存下來。
    假設你今天成功的將資料寫入了資料庫中,且系統提示保存成功。就算之後突然發生電腦斷電或系統崩潰等情況。在系統修復後重新開啟資料庫,你先前保存的資料仍然會存在,因為資料庫已確保該筆資料被永久寫入。

上一篇
Day19 - Spring Data JPA (4)
下一篇
Day21 - Spring 中的事務(中)
系列文
這些年SpringBoot實戰開發教會我的事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言